﻿/*
 * Script: "mapa_buscador_inc.js"
 * Copyright 2011 SISVOX.
 *
 * Licenciado bajo SISVOX, Version 1.0 (la "Licencia");
 * El codigo presente que compone este Software es propiedad unica y
 * exclusivamente de SISVOX, por lo tanto, usted no podrá utilizar este
 * archivo excepto en cumplimiento de la Licencia ofrecida por SISVOX.
 * Usted puede obtener una copia de la Licencia en:
 *
 *      Soluciones Integrales de Software Vox (SISVOX)
 *                 http://www.sisvox.com
 *
 *     - Carlos Calvo      <ccalvo@sisvox.com>
 *     - Andres Hernandez  <ahernandez@sisvox.com>
 *
 * A menos que sea requerido por la ley aplicable o se acuerde por escrito,
 * el software distribuido bajo la licencia se distribuye "TAL CUAL", CON
 * LAS GARANTIAS Y CONDICIONES expresadas en la "Licencia".
 */
 
 
// Inicialización de Variables
var map_buscador_inc	= null;
var markersArray 		= [];
var circleTurno			= null;
var infoBubbleTurnob 	= null;

var ancho_peq 		= 0;
var alto_peq 		= 0;
var ancho_med 		= 0;
var alto_med 		= 0;
var bounds			= null;

// Parametros del Circulo
var radio			= 50;			// Radio de la Circunferencia KM

// Variables donde se guardan los datos de los Resultados a mostrar
var id_municipio_base 		= null;
var lista_id_incidencia 	= null;
var lista_coord_x 			= null;
var lista_coord_y 			= null;
var lista_id_tipo_inc 		= null;
var lista_fecha_ocurrencia 	= null;
var lista_id_status_inc 	= null;
var lista_ruta_img1 		= null;

var lista_tipo_inc_id 		= null;
var lista_tipo_inc_nombre 	= null;
var nombre_tipo_inc 		= new Array();

// Dimension de las Imagenes
var lista_img_id 			= null;
var lista_img_ancho_peq 	= null;
var lista_img_alto_peq 		= null;
var lista_img_ancho_med 	= null;
var lista_img_alto_med 		= null;
var img_dimension_ancho_peq = new Array();
var img_dimension_alto_peq 	= new Array();
var img_dimension_ancho_med = new Array();
var img_dimension_alto_med 	= new Array();


// =================================================================================================================
// ==================================================== BUSCADOR ===================================================
// =================================================================================================================

function buscador_inc( opcion ) {
	
	// Creamos el Mapa
	var centerPoint = new google.maps.LatLng( parseFloat(mapa_coord_x).toFixed(8), parseFloat(mapa_coord_y).toFixed(8) );
	var myOptions = {
		zoom: parseInt(mapa_zoom),
		zoomControlOptions: {
      		style: google.maps.ZoomControlStyle.LARGE
    	},
		center: centerPoint,
		panControl: true,
		mapTypeControl: false,
		scaleControl: true,
		streetViewControl: false,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	map_buscador_inc = new google.maps.Map(document.getElementById("mapa_buscador_inc"), myOptions);
	
	google.maps.event.addListener(map_buscador_inc, 'click', function(event) {
		
		// Limpiamos el Mapa
		clearOverlays();
		if ( circleTurno != null ) {
			circleTurno.setMap(null);	
		}
		
		bounds = map_buscador_inc.getBounds();
		
		// Sacamos las Coordenadas porque no podemos pasar el Punto
		coord_x_c = event.latLng.lat();
		coord_y_c = event.latLng.lng();
		
		xajax_buscador_inc_xajax(radio, coord_x_c, coord_y_c, opcion);
	});
}


// =================================================================================================================
// ================================================= PINTAR CIRCULO ================================================
// =================================================================================================================

// (El circulo representa el Area de Busqueda y esta definido por un radio fijo)

function pintar_circulo(coord_x_c, coord_y_c, radio) {
	
	// Armamos el Punto ya que no se puede pasar como parametro (es un Objeto)
	var point = new google.maps.LatLng( coord_x_c.toFixed(8), coord_y_c.toFixed(8) );
	
	// Agregamos el Circulo al mapa
	var circle = new google.maps.Circle({
		radius: (radio*1000),
		map: map_buscador_inc,
		center: point,
		strokeColor: color_menu,		// Color de la Linea de Borde del Circulo
		strokeOpacity: 1,				// Opacidad del Linea de Borde
		strokeWeight: 1,				// Ancho de la Linea de Borde
		fillColor: "#FFFF00",			// Color del Relleno del Circulo: Amarillo
		fillOpacity: 0.4				// Opacidad del Relleno del Circulo
	});
	
	circleTurno = circle;
	
	// Guardamos los valores del Area de Busqueda
	map_buscador_inc.fitBounds(circle.getBounds());
}


// =================================================================================================================
// ========================================= INICALIZAR LOS DATOS DEL MAPA =========================================
// =================================================================================================================

function inicializar_datos() {
	
	id_municipio_base 			= document.getElementById("h_id_municipio_base").value;
	
	var h_ls_coord_x 			= document.getElementById("h_ls_coord_x").value;
	lista_coord_x 				= h_ls_coord_x.split( "/*" );
	
	var h_ls_coord_y 			= document.getElementById("h_ls_coord_y").value;
	lista_coord_y 				= h_ls_coord_y.split( "/*" );
	
	var h_ls_id_tipo_inc 		= document.getElementById("h_ls_id_tipo_inc").value;
	lista_id_tipo_inc 			= h_ls_id_tipo_inc.split( "/*" );
	
	var h_ls_fecha_ocu 			= document.getElementById("h_ls_fecha_ocu").value;
	lista_fecha_ocurrencia 		= h_ls_fecha_ocu.split( "/*" );
	
	var h_ls_id_status_inc 		= document.getElementById("h_ls_id_status_inc").value;
	lista_id_status_inc			= h_ls_id_status_inc.split( "/*" );
	
	var h_ls_ruta_img1 			= document.getElementById("h_ls_ruta_img1").value;
	lista_ruta_img1				= h_ls_ruta_img1.split( "/*" );
	
	
	var h_ls_tipo_inc_id 		= document.getElementById("h_ls_tipo_inc_id").value;
	lista_tipo_inc_id 			= h_ls_tipo_inc_id.split( "/*" );
	
	var h_ls_tipo_inc_nombre 	= document.getElementById("h_ls_tipo_inc_nombre").value;
	lista_tipo_inc_nombre 		= h_ls_tipo_inc_nombre.split( "/*" );
	
	nombre_tipo_inc = new Array();
	for ( i = 0; i < lista_tipo_inc_id.length - 1; i++ ) {
		nombre_tipo_inc[lista_tipo_inc_id[i]] 		= lista_tipo_inc_nombre[i];
	}
	
	
	// Dimension de las Imagenes
	var h_ls_img_id 			= document.getElementById("h_ls_img_id").value;
	lista_img_id 				= h_ls_img_id.split( "/*" );
	
	var h_ls_img_ancho_peq 		= document.getElementById("h_ls_img_ancho_peq").value;
	lista_img_ancho_peq 		= h_ls_img_ancho_peq.split( "/*" );
	
	var h_ls_img_alto_peq 		= document.getElementById("h_ls_img_alto_peq").value;
	lista_img_alto_peq 			= h_ls_img_alto_peq.split( "/*" );
	
	var h_ls_img_ancho_med 		= document.getElementById("h_ls_img_ancho_med").value;
	lista_img_ancho_med 		= h_ls_img_ancho_med.split( "/*" );
	
	var h_ls_img_alto_med 		= document.getElementById("h_ls_img_alto_med").value;
	lista_img_alto_med			= h_ls_img_alto_med.split( "/*" );
	
	img_dimension_ancho_peq 	= new Array();
	img_dimension_alto_peq 		= new Array();
	img_dimension_ancho_med 	= new Array();
	img_dimension_alto_med 		= new Array();
	for ( i = 0; i < lista_img_id.length - 1; i++ ) {
		img_dimension_ancho_peq[lista_img_id[i]] 	= lista_img_ancho_peq[i];
		img_dimension_alto_peq[lista_img_id[i]] 	= lista_img_alto_peq[i];
		img_dimension_ancho_med[lista_img_id[i]] 	= lista_img_ancho_med[i];
		img_dimension_alto_med[lista_img_id[i]] 	= lista_img_alto_med[i];
	}
}


// =================================================================================================================
// ================================================ VERIFICAR Y PINTAR =============================================
// =================================================================================================================

function verificar_y_pintar(radio, lng, lat, opcion) {
	
	// Inicializamos los InfoBubbles
	var infowindow_div_incidencia_buscador 		= document.getElementById('infowindow_div_incidencia_buscador').innerHTML;
	var infowindow_div_imagen_buscador 			= document.getElementById('infowindow_div_imagen_buscador').innerHTML;
	
	// Parseamos los Posibles Resultados
	var h_ls_id_incidencia 	= document.getElementById("h_ls_id_incidencia").value;
	lista_id_incidencia 	= h_ls_id_incidencia.split( "/*" );
	
	if ( lista_id_incidencia.length >= 1 ) {
		
		// Inicializamos los Datos a Pintar
		inicializar_datos();
		
		// Coordenada del Centro del Area de Busqueda
		var centro = new google.maps.LatLng( parseFloat(lng).toFixed(8), parseFloat(lat).toFixed(8) );
		
		// Inicializamos y Seteamos las Variables de los Marcadores
		var turno;
		var distancia_turno;
		var h_ls_tabla_inc = "";
		
		// Para todos los Posibles Resultados
		for ( var j = 0; j < lista_id_incidencia.length; j++ ) {
			
			// Coordenada del Posible Resultado de Turno
			turno = new google.maps.LatLng( parseFloat(lista_coord_x[j]).toFixed(8), parseFloat(lista_coord_y[j]).toFixed(8) );
			
			distancia_turno = (google.maps.geometry.spherical.computeDistanceBetween( centro, turno ) / 1000).toFixed(2);
			
			// Si la Incidencia esta dentro del Area de Busqueda
			if (radio > distancia_turno) {
				
				h_ls_tabla_inc = h_ls_tabla_inc + lista_id_incidencia[j] + "," + distancia_turno + ";";
				
				// Obtenemos los atributos de cada Marcador
				var point 	= turno;
				
				ancho_peq 	= img_dimension_ancho_peq[lista_id_tipo_inc[j]];
				alto_peq 	= img_dimension_alto_peq[lista_id_tipo_inc[j]];
				ancho_med 	= img_dimension_ancho_med[lista_id_tipo_inc[j]];
				alto_med 	= img_dimension_alto_med[lista_id_tipo_inc[j]];
				
				icono_marker = "../../publico/imagenes/incidencias/peq/" + lista_id_tipo_inc[j] + ".gif";
				image = new google.maps.MarkerImage( icono_marker,
					new google.maps.Size( ancho_peq, alto_peq ),
					new google.maps.Point( 0, 0 ),
					new google.maps.Point( parseInt(ancho_peq/2), parseInt(alto_peq/2) ));
				
				// Llenamos la Informacion del InfoWindow
				// Si el Tab es Incidencia
				html_tab1 	= infowindow_div_incidencia_buscador;
				html_tab1	= html_tab1.replace("%%element.id_incidencia%%",		lista_id_incidencia[j]);
				
				html_tab1	= html_tab1.replace("%%element.nombre_tipo_inc%%",		nombre_tipo_inc[lista_id_tipo_inc[j]]);
				html_tab1 	= html_tab1.replace("%%element.fecha_ocurrencia%%",		lista_fecha_ocurrencia[j]);
				html_tab1 	= html_tab1.replace("%%element.id_status%%",			lista_id_status_inc[j]);
				
				// Si el Tab es Imagen
				html_tab2 	= infowindow_div_imagen_buscador;
				html_tab2 	= html_tab2.replace("%%element.id_incidencia%%",		lista_id_incidencia[j]);
				
				html_tab2 	= html_tab2.replace("%%element.desc_image_inc%%",		"<img src='../../../alcaldia/" + id_municipio_base + "/smist/" + lista_ruta_img1[j] + "' title='" + nombre_tipo_inc[lista_id_tipo_inc[j]] + "' alt='" + nombre_tipo_inc[lista_id_tipo_inc[j]] + "' width='150px' height='150px'/>");
				
				// Configuramos el infoBubble
				var infoBubble = new InfoBubble({
					maxWidth: 300,
					minWidth: 300,
					maxHeight: 200,
					minHeight: 200,
					map: map_buscador_inc,
					shadowStyle: 1,
					padding: 5,
					backgroundColor: '#FFFFFF',
					borderRadius: 15,
					arrowSize: 20,
					borderWidth: 2,
					borderColor: color_menu,
					disableAutoPan: false,
					hideCloseButton: false,
					arrowPosition: 50,
					arrowStyle: 0
				});
				
				// Agregamos los Tabs al InfoWindow
				infoBubble.addTab('Incidencia', 		html_tab1);
				infoBubble.addTab('Imagen', 			html_tab2);
				
				// Creamos el Marcador
				var marker = new google.maps.Marker({
					position: point,
					map: map_buscador_inc,
					title: nombre_tipo_inc[lista_id_tipo_inc[j]],
					icon: image,
					infoBubblez: infoBubble
				});
				markersArray.push(marker);
				
				// Creamos el Evento
				google.maps.event.addListener(marker, "click", function () {
					if (!(this.infoBubblez).isOpen()) {
						if ( infoBubbleTurnob != null ) {
							infoBubbleTurnob.close();	
						}
						(this.infoBubblez).open(map_buscador_inc, this);
						infoBubbleTurnob = this.infoBubblez;
					}
				});
			}
		}
		
		if ( h_ls_tabla_inc != "" ) {
			document.getElementById("h_ls_tabla_inc").value = h_ls_tabla_inc;
		} else {
			document.getElementById("h_ls_tabla_inc").value = "";
		}
		
		// Llamamos al AJAX que crea la Tabla con h_ls_tabla_inc como parametro
		xajax_generar_tabla_inc_xajax(h_ls_tabla_inc, opcion);
	} else {
		alert("ATENCIÓN: No se encontraron Incidencias en el Área seleccionada.");
	}
}


// =================================================================================================================
// ===================================== ELIMINA LOS MARCADORES SOBRE EL MAPA ======================================
// =================================================================================================================

function clearOverlays() {
	if ( markersArray ) {
		for ( i in markersArray ) {
			markersArray[i].setMap(null);
		}
	}
}